﻿using System;
using System.Collections.Generic;
using System.Text;
using Castle.ActiveRecord;
using Atendex.Dominio;
using System.Net.Mail;

namespace Atendex.Dominio.ActiveRecord
{
    [ActiveRecord("solicitacao")]
    [Serializable]
    public class SolicitacaoAR : ActiveRecordBase<SolicitacaoAR>, ISolicitacao
    {
        private SolicitacaoAR() { }
        internal SolicitacaoAR(IAtendimento atendimento, ITipoSolicitacao tipo, IMensagem mensagem) : this(atendimento, tipo, new List<IMensagem>(){ mensagem})
        {
            
        }
        internal SolicitacaoAR(IAtendimento atendimento, ITipoSolicitacao tipo, IList<IMensagem> mensagens)
        {
            this._atendimento = atendimento;
            this.Visivel = true;
            Mensagens = mensagens;
        }
        #region propriedades
        private int _id;
        [PrimaryKey]
        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
        private DateTime? _dataInicio;
        [Property]
        public DateTime? DataInicio
        {
            get { return _dataInicio; }
            set { _dataInicio = value; }
        }
        private DateTime? _dataResolucao;
        [Property]
        public DateTime? DataResolucao
        {
            get { return _dataResolucao; }
            set { _dataResolucao = value; }
        }
        private DateTime? _prazo;
        [Property]
        public DateTime? DataPrazo
        {
            get { return _prazo; }
            set { _prazo = value; }
        }
        private StatusSolicitacao _status;
        [Property]
        public StatusSolicitacao Status
        {
            get { return _status; }
            set { _status = value; }
        }

        private ITipoSolicitacao _tipo;
        [BelongsTo(Type=typeof(TipoSolicitacaoAR),NotNull=true)]
        public ITipoSolicitacao Tipo
        {
            get { return _tipo; }
            set { _tipo = value; }
        }
        private IList<IMensagem> _mensagens;
        [HasMany(typeof(MensagemAR), Cascade = ManyRelationCascadeEnum.All, Table = "mensagem", ColumnKey = "solicitacaoid")]
        public IList<IMensagem> Mensagens
        {
            get { return _mensagens; }
            set { _mensagens = value; }
        }
        private IAtendimento _atendimento;
        [BelongsTo(Type=typeof(AtendimentoAR))]
        public IAtendimento Atendimento
        {
            get { return _atendimento; }
            private set { _atendimento = value; }
        }

        [Property]
        public bool Visivel { get; set; }

       

#endregion

        #region ISolicitacao Members
        public void NotificarAreaResponsavel()
        {
            // utiliza as configs em web.config
            SmtpClient smtp = new SmtpClient();
        }
        #endregion

        #region ISolicitacao Members


        

        #endregion
    }
}
